AI 엔지니어링 — EP0 선수지식 (v1)

대상: 고등학생·학부 1년차 (AI 입문자). AI 엔지니어링 EP1~7(LLM·Transformer·RoPE·YaRN·SFT·RLHF) 학습 진입 전 알아야 할 7가지 기초를 비유와 코드로 정리합니다.

검증일 2026-05-20 · Tavily+Brave+SearXNG N=3 · Tier 1 ≥10 (Stanford CS229·CS224N·MIT 6.S191·DeepLearning.AI·Hugging Face·fast.ai)

0. 들어가며

AI 엔지니어링 EP1~7 을 이해하려면 먼저 알아야 할 7가지 수학·CS 기초를 비유와 코드로 정리합니다.

AI 엔지니어링 강의에는 "벡터", "그래디언트", "softmax", "어텐션" 같은 용어가 자주 나옵니다. 이 용어들은 수학·신경망 기초 위에 쌓인 개념이라, 기초 없이 보면 이해하기 어렵습니다.

이 자료는 그 기초를 7개 영역(선형대수·미적분·확률통계·Python·신경망·자료구조·자연언어)으로 나눠 다룹니다. 한 번 훑은 뒤 본 강의로 가면 각 용어가 어디에 속하는지 지도가 그려집니다.

참고 — 외울 필요는 없습니다. "그런 게 있구나" 정도로 통과시키고, 막히면 참고 링크로 돌아오세요.

각 개념은 정의 → 비유 → 직접 해보기 → 코드 → 그림 → 실무 → 참고 → LLM 연결 순서로 설명합니다.


1. 선형대수

LLM 의 모든 입출력은 숫자 묶음(벡터)과 숫자 표(행렬)입니다. "강아지" 라는 단어를 컴퓨터가 이해하려면 수백 개의 숫자 묶음으로 바꿔야 하는데, 그 변환·연산·비교가 모두 선형대수입니다.

1.1 벡터 (Vector)

여러 숫자를 순서대로 묶은 묶음입니다. 화살표로도, 숫자 리스트로도 표현할 수 있습니다.

비유 1 — 화살표. "북동쪽으로 5km" 라는 말에는 방향(북동)과 크기(5km)가 함께 담겨 있습니다. 벡터가 정확히 이렇습니다. [3, 4] 는 x로 3, y로 4 간 화살표(길이 5)입니다.

비유 2 — 친구 정보 카드. [키 172, 몸무게 65, 시력 1.2] 는 한 친구를 나타내는 3차원 벡터입니다. 우리는 3차원까지만 그릴 수 있지만, 컴퓨터는 수천 차원도 똑같이 다룹니다.

실생활 예 — 영화 추천. 넷플릭스는 사용자를 [액션 80, 로맨스 30, 코미디 50], 영화를 [액션 90, 로맨스 5, 코미디 20] 으로 저장합니다. 두 벡터의 방향이 비슷하면 추천이 됩니다.

직접 해보기 — 벡터 [3, 4] 의 길이는 각 숫자를 제곱해 더한 뒤(3²+4²=25) 루트를 씌워 √25 = 5 입니다(피타고라스 정리). [6, 8] 은 √100 = 10 으로, 방향은 같고 길이만 2배입니다.

import numpy as np
v = np.array([3, 4])
print(np.linalg.norm(v))      # 5.0  (길이)
print(v / np.linalg.norm(v))  # [0.6 0.8]  (단위벡터)
 y
 4 |        ● (3,4)
 3 |       /:
   |      / :   ← 길이 = √(3²+4²) = 5
 0 +----+---+--- x
   0    3

실무. 추천 시스템은 사용자와 상품을 모두 벡터로 저장합니다. 쿠팡·유튜브·스포티파이의 "추천" 이 곧 벡터 거리 계산입니다.

LLM 연결. 거대 언어모델은 "강아지" 를 768~4096 차원 벡터(임베딩)로 바꿉니다. 비슷한 뜻의 단어는 비슷한 방향을 가지며, EP2(임베딩)·EP4(어텐션)로 발전합니다.

더 깊이3Blue1Brown 벡터편 · Khan Academy

1.2 행렬 (Matrix)

벡터를 여러 줄 쌓은 숫자 표(행 × 열 격자)입니다. 즉 행렬은 벡터의 묶음입니다.

비유 1 — 엑셀 시트. 학생 30명의 [국어, 영어, 수학] 점수는 30행 × 3열 표가 됩니다. 한 행이 한 학생의 점수 벡터죠.

비유 2 — 흑백 사진. 1920×1080 사진은 1080행 × 1920열 행렬(각 칸은 0~255 밝기)입니다. 컴퓨터에게 사진은 곧 행렬입니다.

실생활 예 — 영화관 좌석표. 행(A~J) × 열(1~20) 격자에 예매=1·빈자리=0 을 채우면, "몇 자리 남았나" 는 0 의 개수가 됩니다.

직접 해보기[[90, 85, 100], [70, 95, 80]] 은 행 2개·열 3개라서 shape = (2, 3), "2명 × 3과목" 입니다. 행렬 모양 읽기는 코딩에서 가장 자주 하는 일입니다.

M = np.array([[90, 85, 100], [70, 95, 80]])
print(M.shape)      # (2, 3)
print(M[:, 2])      # [100  80]  (수학 점수 열)

실무. 이미지(픽셀 행렬)·표 데이터·문장(단어 벡터 쌓기)이 전부 행렬입니다. 데이터 분석의 기본 단위죠.

LLM 연결. 문장 "나는 학교에 간다" 는 단어 4개 × 768 차원 = 4×768 행렬이 됩니다. 모델 가중치도 전부 거대 행렬입니다.

더 깊이Khan Academy: Matrices

1.3 내적 (Dot Product)

두 벡터를 같은 자리끼리 곱해 모두 더한 하나의 숫자입니다. "두 벡터가 얼마나 같은 방향인가" 를 나타내는 점수죠.

비유 1 — 취향 궁합.[액션5, 로맨스1, 코미디4] 와 친구 [액션4, 로맨스2, 코미디5] 는 둘 다 액션·코미디가 높아 내적 값이 큽니다 = 궁합이 좋다는 뜻입니다.

비유 2 — 손전등과 벽. 정면으로 비추면 밝고(내적 큼), 비스듬하면 어둡고(작음), 90도 옆이면 안 닿습니다(내적 0 = 직각).

직접 해보기[5, 1, 4] · [4, 2, 5] = (5×4)+(1×2)+(4×5) = 20+2+20 = 42. 연습으로 [2, 3] · [4, 1] = 2×4 + 3×1 = 11.

a = np.array([5, 1, 4]); b = np.array([4, 2, 5])
print(np.dot(a, b))   # 42
print(a @ b)          # 42  (@ 도 내적)

실무. 검색 엔진은 "검색어 벡터 · 문서 벡터" 의 내적으로 관련도 점수를 매겨 랭킹합니다. 값이 클수록 위에 노출되죠.

LLM 연결. 어텐션의 핵심이 내적입니다. "이 단어가 저 단어에 얼마나 주목하나" 를 두 단어 벡터의 내적으로 계산합니다(EP4·EP5). 내적을 알면 어텐션은 그냥 곱하고 더하기입니다.

더 깊이3Blue1Brown 내적편

1.4 코사인 유사도 (Cosine Similarity)

두 벡터의 각도만으로 비슷함을 재는 값(-1~1)입니다. 크기는 무시하고 방향만 봅니다.

비유 — 같은 곳 보기. 두 사람이 같은 방향(0도)이면 1, 직각(90도)이면 0, 정반대(180도)면 -1입니다.

왜 내적 대신 쓰나. 내적은 크기에 휘둘립니다(긴 문서일수록 무조건 큼). 코사인은 길이를 1로 맞춰 순수 방향만 비교하므로, 길이가 다른 문서끼리도 공정하게 비교할 수 있습니다.

직접 해보기[1, 0][2, 0] 은 둘 다 오른쪽을 향하니(각도 0) 코사인 = 1. [1, 0][0, 1] 은 직각(90도)이라 0 입니다.

from numpy.linalg import norm
a = np.array([5, 1, 4]); b = np.array([4, 2, 5])
print(round(a @ b / (norm(a) * norm(b)), 3))   # 0.949

실무. 스포티파이 "비슷한 곡", 벡터DB(Pinecone·Chroma)의 "유사 문서 검색" 이 전부 코사인 유사도입니다. 인기곡이든 신곡이든 분위기 방향이 같으면 추천되죠.

LLM 연결. RAG(검색증강생성, EP2)에서 "내 질문과 가장 비슷한 문서 찾기" 가 코사인 유사도입니다. 수백만 문서 중 방향이 가장 가까운 것을 즉시 검색합니다.

더 깊이Khan Academy

1.5 행렬 곱 (Matrix Multiplication)

행렬끼리 곱해 새로운 표로 변환하는 연산입니다. 내적을 여러 번 한꺼번에 하는 것이죠.

비유 — 변환 기계. 행렬 곱은 입력을 넣으면 모양이 바뀌어 나오는 기계입니다. "한국어 벡터 → 영어 의미 벡터" 변환기 자체가 행렬이고, 적용이 행렬 곱입니다.

직접 해보기 — 결과의 한 칸만 보면, [[1,2],[3,4]] × [[5,6],[7,8]] 의 [0,0] 칸은 1행 [1,2] 과 1열 [5,7] 의 내적 = (1×5)+(2×7) = 19 입니다. 즉 행렬 곱은 행과 열의 내적을 칸마다 반복하는 것입니다.

A = np.array([[1, 2], [3, 4]]); B = np.array([[5, 6], [7, 8]])
print(A @ B)   # [[19 22] [43 50]]

실무. 신경망의 모든 층이 "입력 × 가중치 행렬" 입니다. 답변 1개에 수천 번의 행렬 곱이 일어나며, GPU 가 AI 에 필수인 이유가 바로 행렬 곱을 초고속 병렬로 하기 때문입니다(EP1 인프라).

LLM 연결. Transformer 한 층은 여러 행렬 곱입니다. 대형 모델이 "수천억 개 파라미터" 라는 말은 행렬 칸이 수천억 개라는 뜻입니다.

더 깊이3Blue1Brown 행렬 곱편

1.6 고유값·고유벡터 (Eigenvalue·Eigenvector)

어떤 변환(행렬)을 적용해도 방향이 바뀌지 않는 특별한 화살표가 고유벡터, 그 늘어난 배율이 고유값입니다.

비유 — 도는 지구본의 축. 빙글 도는 지구본에서 남극–북극 축만 자리를 바꾸지 않습니다(다른 점은 모두 돕니다). 그 축이 고유벡터로, 변환의 본질적 방향을 알려줍니다.

직접 해보기[[2,0],[0,3]][1,0] 에 곱하면 [2,0] 이 됩니다. 방향은 그대로고 길이만 2배죠. 따라서 [1,0] 은 고유벡터, 2 는 고유값입니다.

A = np.array([[2, 0], [0, 3]])
vals, _ = np.linalg.eig(A)
print(vals)   # [2. 3.]  (고유값)

실무. 초창기 구글 페이지랭크가 거대 링크 행렬의 고유벡터 계산이었습니다. 데이터의 핵심 축을 뽑는 도구(PCA 차원축소)입니다.

LLM 연결. 차원 축소(PCA)·임베딩 분석에 쓰입니다. EP5 의 위치임베딩(RoPE)도 회전 행렬 개념과 닿아 있어, 고유값·회전 직관이 있으면 훨씬 수월합니다.

더 깊이3Blue1Brown 고유값편

1.7 정리

개념 LLM 에서의 역할
벡터 단어·문장의 의미 표현 (임베딩)
행렬 문장 전체·모델 가중치
내적 어텐션 점수 (단어 간 주목도)
코사인 유사도 RAG 문서 검색·벡터DB
행렬 곱 신경망 모든 층 (GPU 가속 대상)
고유값 차원 축소·회전(RoPE 직관)

한 문장으로, LLM 은 글자를 벡터로 바꾸고(임베딩) 행렬 곱으로 섞고 내적으로 서로 주목하게(어텐션) 만드는 거대한 선형대수 계산기입니다.

참고 자료3Blue1Brown Essence of Linear Algebra (한국어 자막, 강력 추천) · Khan Academy Linear Algebra


2. 미적분

AI 가 학습한다는 건 "지금 틀린 답을 조금씩 고쳐 정답에 가까워지기" 입니다. 그 "조금씩 어느 방향으로" 를 알려주는 것이 미분이며, 신경망 학습의 심장입니다.

2.1 미분 (Derivative)

어떤 값이 순간적으로 얼마나 빨리 변하는가, 즉 기울기입니다.

비유 1 — 자동차 속도계. 1시간에 60km 가면 평균 속도는 60이지만, 지금 이 순간 속도계 바늘이 가리키는 값이 미분입니다.

비유 2 — 언덕 경사. 등산로의 지금 발 밑 경사가 미분입니다. 가파르면 미분이 크고, 평평하면 0입니다.

직접 해보기y = x² 의 미분은 2x 입니다(지수를 앞으로, 지수는 -1). x=3 이면 2×3 = 6, 즉 "x=3 근처에서 x가 1 늘면 y는 약 6 늘어난다" 는 뜻입니다.

def f(x): return x**2
x, h = 3.0, 1e-5
print(round((f(x+h) - f(x)) / h, 2))   # 6.0

실무. 모든 딥러닝 프레임워크가 미분을 자동 계산(autograd)해 "어느 방향으로 고쳐야 덜 틀리나" 를 찾습니다.

LLM 연결. 학습은 틀린 정도(loss)를 미분해 덜 틀리는 방향으로 가중치를 수정하는 일입니다. 미분 없이는 학습이 불가능합니다.

더 깊이3Blue1Brown 미분편

2.2 편미분·그래디언트 (Gradient)

변수가 여러 개일 때 하나씩 따로 미분한 것이 편미분, 그걸 다 모은 화살표가 그래디언트입니다.

비유 — 등산 지도의 화살표. 산에서 가장 가파른 오르막 방향을 가리키는 화살표가 그래디언트입니다. 반대로 가면 가장 빨리 골짜기(정답)에 도착하죠.

직접 해보기z = x² + y² 의 그래디언트는 [2x, 2y] 입니다. (x=1, y=2)면 [2, 4] 죠.

import torch
x = torch.tensor(1.0, requires_grad=True)
y = torch.tensor(2.0, requires_grad=True)
(x**2 + y**2).backward()
print(x.grad, y.grad)  # tensor(2.) tensor(4.)

실무. "그래디언트가 폭발/소실된다" 는 딥러닝 디버깅 단골 용어로, 학습이 안 될 때 가장 먼저 의심하는 부분입니다.

LLM 연결. 수십억 개 가중치 각각의 그래디언트를 구해 전부 동시에 조금씩 수정하는 것이 "학습 1 step" 입니다.

더 깊이Khan Academy: Gradient

2.3 체인룰 (Chain Rule)

함수 안에 함수가 있을 때(합성함수) 미분을 사슬처럼 곱해서 구하는 법입니다.

비유 — 도미노. A가 B를 밀고 B가 C를 밀면, "A가 C에 주는 영향" 은 (A→B 영향) × (B→C 영향)입니다. 미분도 똑같이 곱해서 거슬러 올라갑니다.

직접 해보기y = (3x+1)² 의 미분은 바깥(제곱) 미분 2(3x+1) 과 안쪽(3x+1) 미분 3 을 곱한 6(3x+1) 입니다.

x = torch.tensor(2.0, requires_grad=True)
y = (3*x + 1)**2
y.backward()
print(x.grad)   # tensor(42.)  = 6×(3×2+1)

실무. 역전파(Backpropagation)가 곧 체인룰입니다. 깊은 신경망의 마지막 층 오차를 첫 층까지 거슬러 전달하는 것이 전부 체인룰 곱셈입니다.

LLM 연결. Transformer 가 수십 층 깊어도 학습되는 이유는 체인룰로 오차를 끝까지 전달하기 때문입니다(EP4·EP7).

더 깊이3Blue1Brown 체인룰편

2.4 경사하강법 (Gradient Descent)

그래디언트 반대 방향으로 조금씩 내려가 가장 낮은 골짜기(최소 오차)를 찾는 방법입니다.

비유 — 안개 속 하산. 짙은 안개로 앞이 안 보일 때, 발 밑 경사만 느끼며 가장 가파른 내리막으로 한 걸음씩 내려가면 결국 골짜기에 도착합니다.

직접 해보기f(x)=x², x=3, 학습률 0.1 이면, 기울기 2×3=6 이므로 새 x = 3 − 0.1×6 = 2.4. 이를 반복하면 x 는 0(최소점)으로 수렴합니다.

x, lr = 3.0, 0.1
for _ in range(20):
    x = x - lr * (2*x)
print(round(x, 3))   # 0.026  (거의 0)

실무. SGD, Adam 등 옵티마이저가 전부 경사하강 변형이며, "학습률 튜닝" 이 AI 엔지니어의 일상입니다.

LLM 연결. 모델 학습은 loss 골짜기를 경사하강으로 내려가는 일입니다. 학습률이 너무 크면 골짜기를 건너뛰고, 너무 작으면 영원히 도착하지 못합니다.

더 깊이3Blue1Brown 신경망 학습편

2.5 정리

개념 LLM 에서의 역할
미분 가중치를 어느 방향 수정할지
그래디언트 모든 가중치의 수정 방향 묶음
체인룰 역전파 (깊은 층까지 오차 전달)
경사하강 실제 학습 알고리즘 (Adam 등)

한 문장으로, AI 학습은 틀린 정도를 미분(그래디언트)해서 체인룰로 끝까지 전달하고 경사하강으로 조금씩 고치는 반복입니다.

참고 자료3Blue1Brown Essence of Calculus · Khan Academy Calculus


3. 확률·통계

LLM 은 다음 단어를 확률로 찍는 기계입니다. "나는 학교에 ___" 다음에 "간다"(80%)·"갔다"(15%)·"피자"(0.01%) 처럼 확률 분포를 내놓고 하나를 고릅니다. 그래서 확률은 LLM 의 모국어입니다.

3.1 확률분포

어떤 일이 각각 얼마나 자주 일어나는가의 지도이며, 모든 확률의 합은 1입니다.

비유 — 주사위·일기예보. 주사위는 1~6 이 각 1/6(균등 분포)이고, 일기예보 "비 70%, 맑음 30%" 도 분포입니다.

직접 해보기 — 동전 2번 던질 때 앞면 수는 앞0:1/4, 앞1:2/4, 앞2:1/4 이고, 합은 4/4 = 1 입니다(분포는 항상 합이 1).

probs = np.array([0.25, 0.5, 0.25])
print(probs.sum())   # 1.0

실무. LLM 의 출력은 전체 어휘(수만 단어)에 대한 확률분포입니다. "temperature" 설정이 이 분포를 뾰족(확실)하게 또는 완만(다양)하게 조절합니다.

LLM 연결. 모든 토큰 생성이 확률분포에서 뽑기이며, EP2 의 "temperature·top-p" 가 이 분포를 조작합니다.

더 깊이Khan Academy: Probability

3.2 조건부확률·베이즈

"B가 일어났다는 걸 알 때 A의 확률" 이 조건부확률이고, 새 증거로 믿음을 업데이트하는 법이 베이즈입니다.

비유 — 의사의 진단. 기침(증거)을 보고 감기 확률을 올려 잡는 것이며, 새 증상이 나오면 또 업데이트합니다.

직접 해보기 — 스팸 필터는 "무료" 라는 단어가 있으면 스팸 확률을 올립니다. 즉 P(스팸 | "무료") > P(스팸) 이고, 단어가 쌓일수록 확률이 갱신됩니다.

# P(스팸|단어) = P(단어|스팸)*P(스팸) / P(단어)
print(round(0.8 * 0.4 / 0.5, 3))   # 0.64

실무. 스팸 필터·의료 진단·A/B 테스트가 전부 베이즈로, "사전 믿음 → 데이터 → 사후 믿음" 사이클입니다.

LLM 연결. 언어모델은 "앞 단어들이 주어졌을 때 다음 단어 확률", 즉 조건부확률 P(다음 | 이전들)을 학습한 것입니다. 이것이 GPT 의 정의 그 자체입니다.

더 깊이Khan Academy: Conditional probability

3.3 기댓값·분산

평균적으로 기대되는 값이 기댓값, 값들이 얼마나 흩어졌는가가 분산입니다.

비유 — 시험 점수. 반 평균 70점이 기댓값입니다. 다들 70 근처면 분산이 작고, 0~100 으로 널뛰면 분산이 큽니다.

직접 해보기 — 주사위 기댓값은 (1+2+3+4+5+6)/6 = 21/6 = 3.5 입니다.

vals = np.array([1,2,3,4,5,6])
print(vals.mean(), round(vals.var(), 2))   # 3.5 2.92

실무. 모델 성능 평가, 학습 안정성(분산 큰 그래디언트 = 불안정) 진단에 쓰입니다.

LLM 연결. 배치 학습과 정규화(LayerNorm)가 평균·분산을 다룹니다(섹션 5).

더 깊이Khan Academy: Statistics

3.4 최대우도추정·엔트로피·Cross-Entropy

데이터를 가장 그럴듯하게 설명하는 값 찾기가 MLE, 불확실성의 크기가 엔트로피, 예측과 정답의 차이 벌점이 cross-entropy 입니다.

비유 — 엔트로피는 헷갈림. 동전(앞뒤 5:5)은 최대로 헷갈리고(엔트로피 큼), "항상 앞면" 동전은 전혀 안 헷갈립니다(엔트로피 0).

비유 — Cross-Entropy 는 오답 벌점. 정답이 "고양이" 인데 모델이 "고양이 10%, 개 90%" 라 하면 큰 벌점, "고양이 95%" 면 작은 벌점입니다.

직접 해보기 — 벌점은 −log(예측확률)입니다. 정답을 0.1 로 예측하면 −log(0.1) ≈ 2.30(큰 벌점), 0.9 로 예측하면 −log(0.9) ≈ 0.10(작은 벌점)입니다.

for p in [0.1, 0.9]:
    print(round(-np.log(p), 2))   # 2.3, 0.1

실무. 분류 모델 학습의 기본 손실함수가 cross-entropy 이고, KL divergence(두 분포 차이)는 모델 정렬·증류에 씁니다.

LLM 연결. LLM 학습 손실이 곧 cross-entropy(예측 분포 vs 실제 다음 단어)이며, EP7 의 학습·튜닝이 이 손실을 최소화합니다.

더 깊이Stanford CS229 강의노트(PDF)

3.5 정리

개념 LLM 에서의 역할
확률분포 다음 단어 후보 확률 (출력)
조건부확률 "이전 단어들 → 다음 단어" = GPT 정의
Cross-Entropy 학습 손실함수 (정답과 차이)
엔트로피·KL 불확실성·분포 차이 (정렬·증류)

한 문장으로, LLM 은 조건부확률 분포를 내놓고(다음 단어) cross-entropy 로 틀린 만큼 벌점 받아 학습하는 확률 기계입니다.

참고 자료Khan Academy Statistics · Stanford CS229 Notes


4. Python (NumPy·PyTorch)

AI 의 거의 모든 코드는 Python 으로 씁니다. 그중 NumPy(숫자 배열)와 PyTorch(딥러닝)가 양대 도구이며, 둘 다 벡터·행렬을 빠르게 다루는 것이 핵심입니다.

4.1 NumPy 배열 (ndarray)

숫자를 격자로 담는 고속 배열로, Python 기본 리스트보다 수십 배 빠릅니다.

비유 — 엑셀의 코드 버전. 셀에 숫자를 채우고 한 번에 계산하는 엑셀처럼, ndarray 는 반복문 없이 배열 전체를 한 줄로 연산합니다.

직접 해보기 — 리스트는 [x*2 for x in [1,2,3]] 처럼 반복문이 필요하지만, NumPy 는 np.array([1,2,3]) * 2 한 줄로 [2 4 6] 을 얻습니다.

a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)         # (2, 3)
print(a.mean(axis=0))  # [2.5 3.5 4.5] (열별 평균)
print(a[a > 3])        # [4 5 6] (조건 필터)

실무. 데이터 전처리·통계·이미지 처리의 기본기이며, Pandas·scikit-learn·PyTorch 가 전부 NumPy 위에 지어졌습니다.

LLM 연결. 임베딩·확률 배열을 NumPy 로 다룹니다. 모든 텐서 연산의 개념적 출발점입니다.

더 깊이NumPy Absolute Beginners

4.2 브로드캐스팅 (Broadcasting)

모양이 다른 배열끼리 연산할 때 작은 쪽을 자동으로 늘려 맞추는 규칙입니다.

비유 — 양념 한 스푼씩. 학생 30명 점수에 전원 +5점 할 때, 5를 30번 복사할 필요 없이 한 번에 더해지는 것입니다.

직접 해보기np.array([[80],[90],[70]]) + 5 는 전원 +5 되어 [[85],[95],[75]] 가 됩니다.

M = np.array([[1, 2, 3], [4, 5, 6]])
print(M - M.mean(axis=0))   # 각 열에서 평균 빼기 (자동 확장)

실무. 정규화(평균 빼고 표준편차 나누기)가 전부 브로드캐스팅이라 코드가 짧고 빨라집니다.

LLM 연결. 배치 데이터(문장 여러 개)에 같은 가중치를 적용할 때 브로드캐스팅이 자동 처리합니다.

더 깊이NumPy Broadcasting

4.3 PyTorch 텐서·자동미분

GPU 까지 갈 수 있는 NumPy 배열(텐서)에 미분 자동 계산(autograd)이 더해진 것입니다.

비유 — NumPy 의 형. ndarray 가 계산기라면, 텐서는 GPU 가속에 자동 미분까지 되는 계산기입니다.

직접 해보기x = torch.tensor(2.0, requires_grad=True) 로 두고 y = x**3; y.backward() 하면, 손으로 미분 안 해도 x.grad 가 3x² = 12 를 자동으로 줍니다.

import torch
x = torch.tensor(2.0, requires_grad=True)
(x**3).backward()
print(x.grad)   # tensor(12.)

실무. 모든 딥러닝 모델이 PyTorch(또는 유사 프레임워크) 텐서로 작성되며, autograd 덕에 역전파를 손으로 짤 필요가 없습니다.

LLM 연결. 모든 LLM 이 텐서로 구현되고, autograd 가 섹션 2(미분)·5(역전파)를 자동화해 줍니다.

더 깊이PyTorch Learn the Basics

4.4 정리

도구 역할
NumPy ndarray 숫자 배열 기본 (벡터·행렬)
브로드캐스팅 정규화·배치 연산 간결화
PyTorch 텐서 GPU 가속 배열
autograd 미분·역전파 자동화

한 문장으로, NumPy 로 숫자를 빠르게, PyTorch 로 GPU 와 자동미분까지 — 이 둘이 AI 코드의 손과 발입니다.

참고 자료NumPy Absolute Beginners · PyTorch Basics


5. 신경망 기초

Transformer(LLM 의 뼈대)는 작은 신경망 블록을 수십 층 쌓은 것입니다. 그 블록 하나를 이해하면 EP4·EP5 가 훨씬 쉬워집니다.

5.1 퍼셉트론 (Perceptron)

입력에 가중치를 곱해 더하고(내적!) 문턱을 넘으면 신호를 내보내는 인공 뉴런입니다.

비유 — 동아리 가입 결정. "친구 있나(×3)? 회비 싼가(×2)? 시간 맞나(×2)?" 각 항목에 중요도(가중치)를 곱해 합산하고, 일정 점수를 넘으면 가입하는 것이 퍼셉트론입니다.

직접 해보기 — 입력 [1, 0, 1], 가중치 [3, 2, 2] 의 가중합은 1×3 + 0×2 + 1×2 = 5(= 내적!)입니다. 문턱이 4 면 5 > 4 라서 신호 1(활성화)이 나갑니다.

x = np.array([1, 0, 1]); w = np.array([3, 2, 2])
out = x @ w - 4          # 가중합 + 편향
print(1 if out > 0 else 0)  # 1 (활성화)

실무. 퍼셉트론 수천 개를 층층이 쌓으면 심층 신경망이 됩니다. 모든 딥러닝의 기본 단위죠.

LLM 연결. Transformer 의 FFN(피드포워드) 층이 곧 퍼셉트론 묶음입니다. "가중합 = 내적" 이라 섹션 1 과 직결됩니다.

더 깊이3Blue1Brown 신경망편

5.2 활성화함수 (ReLU·Sigmoid·Softmax)

가중합 결과를 비선형으로 바꿔 신경망이 복잡한 패턴을 배우게 하는 함수입니다.

비유 — 수도꼭지·확률 변환기. ReLU 는 "음수면 잠그고(0) 양수면 그대로 흘려보냄"(가장 흔함), Sigmoid 는 어떤 값이든 0~1 사이로, Softmax 는 여러 점수를 합이 1인 확률로 바꿉니다(다음 단어 고르기).

직접 해보기 — ReLU([-2, 3, -1, 5]) 는 음수를 0 으로 바꿔 [0, 3, 0, 5]. Softmax([1, 2, 3]) 은 큰 값일수록 큰 확률을 줘 합이 1인 [0.09, 0.24, 0.67] 이 됩니다.

def softmax(x):
    e = np.exp(x - x.max()); return e / e.sum()
print(softmax(np.array([1.0, 2.0, 3.0])).round(2))  # [0.09 0.24 0.67]

실무. ReLU 는 은닉층 표준, Softmax 는 마지막 출력(분류·다음 단어)에 쓰여 거의 모든 모델에 등장합니다.

LLM 연결. LLM 의 마지막 단계가 Softmax 로, 전체 어휘 점수를 다음 단어 확률로 변환합니다(섹션 3 과 직결).

더 깊이MIT 6.S191 Lecture 1

5.3 손실함수·역전파

예측이 얼마나 틀렸는가가 손실, 그 오차를 거꾸로 전달해 가중치를 고치는 것이 역전파입니다.

비유 — 양궁 보정. 화살이 과녁에서 얼마나 빗나갔나(손실) 보고 팔·자세를 조금씩 교정(역전파)하면, 반복할수록 명중합니다.

직접 해보기 — 흐름은 예측 → 정답과 비교해 손실(cross-entropy, 3.4) → 미분(그래디언트, 2.2) → 체인룰(2.3)로 모든 층에 오차 전달(역전파) → 경사하강(2.4)으로 수정, 입니다. PyTorch 는 loss.backward() 한 줄로 전부 자동입니다.

import torch.nn as nn
model = nn.Linear(3, 1)
x = torch.tensor([[1.0, 0.0, 1.0]]); y = torch.tensor([[1.0]])
loss = nn.MSELoss()(model(x), y)
loss.backward()        # 역전파 자동 (체인룰)

실무. "loss 가 안 떨어진다" 가 학습 디버깅 1순위이며, 역전파는 autograd 가 자동 처리합니다.

LLM 연결. LLM 학습 1 step 은 예측 → cross-entropy 손실 → 역전파 → 가중치 수정으로, 섹션 2·3 이 여기서 합쳐집니다.

더 깊이3Blue1Brown 역전파편

5.4 정규화 (Dropout·LayerNorm)

모델이 암기만 하고 응용 못 하는 현상(오버피팅)을 막는 장치들입니다.

비유 — 기출만 외운 학생. 기출은 100점인데 새 문제는 0점이 오버피팅입니다. Dropout 은 공부할 때 일부러 일부 뉴런을 꺼서 한쪽 의존을 막고, LayerNorm 은 값들의 평균·분산을 정돈합니다(3.3).

직접 해보기 — LayerNorm 은 [10, 20, 30] 에서 평균 20 을 빼고 표준편차로 나눠 [-1.22, 0, 1.22](평균0·분산1)로 정돈합니다.

import torch.nn as nn
print(nn.LayerNorm(3)(torch.tensor([[10.0, 20.0, 30.0]])))

실무. 오버피팅은 모든 모델의 적이라 Dropout·LayerNorm·조기종료가 표준 방어입니다.

LLM 연결. Transformer 의 모든 블록에 LayerNorm 이 들어갑니다(EP4 구조도에 반드시 등장). 섹션 3 의 평균·분산이 여기 쓰입니다.

더 깊이MIT 6.S191

5.5 정리

개념 LLM 에서의 역할
퍼셉트론 FFN 층 (가중합=내적)
ReLU 은닉층 비선형
Softmax 다음 단어 확률 출력
손실·역전파 학습 (섹션 2+3 결합)
LayerNorm 모든 Transformer 블록

한 문장으로, Transformer 는 퍼셉트론(가중합) + Softmax(확률) + LayerNorm(정돈) 블록을 수십 층 쌓고 역전파로 학습한 것입니다.

참고 자료3Blue1Brown Neural Networks · MIT 6.S191


6. 자료구조·복잡도

LLM 은 왜 컨텍스트가 길면 느려지나, 왜 KV cache 가 필요한가 — 이 답이 자료구조·복잡도에 있습니다. EP5 의 KV cache 와 어텐션 비용을 이해하는 열쇠입니다.

6.1 시간복잡도 Big-O

데이터가 N개로 늘 때 시간이 얼마나 빨리 늘어나는가의 표기입니다.

비유 — 친구 만나기. O(1)은 단톡방 공지(인원 무관 한 번), O(N)은 한 명씩 전화(100명=100통), O(N²)은 모두가 모두와 1:1 만남(100명=약 10,000번)입니다.

직접 해보기 — N=100 이면 O(N)=100, O(N²)=10,000(100배 차이!), O(log N)≈7(가장 빠름)입니다. 리스트 검색 in 은 O(N)이지만 집합(set)은 O(1)입니다.

s = set(range(1000000))
print(500000 in s)   # 거의 즉시 (해시 O(1))

실무. "이 코드 왜 느리지?" 의 답이 대부분 복잡도이며, O(N²)를 O(N log N)으로 바꾸는 것이 최적화의 핵심입니다.

LLM 연결. 어텐션은 O(N²)입니다. 모든 단어가 모든 단어와 내적(1.3)하기 때문에, 컨텍스트가 2배면 비용이 4배가 됩니다. EP5·EP6 의 효율화 연구가 이 N² 를 줄이려는 시도입니다.

더 깊이Khan Academy Algorithms

6.2 해시·트리·큐

데이터를 빠르게 찾고(해시) 정렬하고(트리) 순서를 관리하는(큐) 그릇들입니다.

비유. 해시테이블은 사물함(번호 알면 즉시 꺼냄 O(1)), 트리는 토너먼트 대진표(단계적 탐색 O(log N)), 큐는 줄 서기(먼저 온 게 먼저, FIFO)입니다.

직접 해보기 — 딕셔너리(해시)로 단어를 세면 count[w] = count.get(w, 0) + 1 한 줄로 {'고양이': 3, '개': 2} 처럼 즉시 집계됩니다.

phone = {"철수": "010-1", "영희": "010-2"}
print(phone["영희"])   # 즉시 (해시 O(1))

실무. 토크나이저(단어↔숫자 매핑)가 해시이고, 캐시·중복 제거에 set/dict 가 필수입니다.

LLM 연결. 토크나이저의 어휘 사전이 해시테이블입니다(단어 → ID 즉시 변환). 섹션 7 과 연결됩니다.

더 깊이Khan Academy CS

6.3 KV Cache

이미 계산한 단어들의 결과를 저장해 두고 재사용하는 것입니다(O(N²) 부담 완화).

비유 — 책갈피. 읽은 페이지를 매번 처음부터 다시 펴면 O(N²)지만, 책갈피(cache)로 이전 계산을 보관하면 새 단어만 계산하면 됩니다.

직접 해보기 — 캐시 없이 단어 100개를 생성하면 1+2+...+100 = 5050번(O(N²))이지만, KV cache 로 이전 99개를 재사용하면 매번 1번씩 100번(O(N))으로 줄어듭니다.

cache = {}
def fib(n):
    if n < 2: return n
    if n in cache: return cache[n]   # 재사용
    cache[n] = fib(n-1) + fib(n-2); return cache[n]
print(fib(50))   # 캐시 없으면 수십 초, 있으면 즉시

실무. LLM 추론 속도의 핵심으로, KV cache 없이는 긴 대화가 기하급수적으로 느려집니다. GPU 메모리의 큰 부분을 차지하죠.

LLM 연결. EP5 의 KV cache 가 바로 이것으로, 어텐션 O(N²)의 반복 계산을 저장으로 줄입니다.

더 깊이Jay Alammar: Illustrated Transformer

6.4 정리

개념 LLM 에서의 역할
Big-O 어텐션 O(N²) 비용 이해
해시테이블 토크나이저 어휘 사전
큐·캐시 KV cache (추론 속도)

한 문장으로, 어텐션은 모두가 모두를 보는 O(N²)라 느리고, 그걸 KV cache(저장 재사용)로 완화하는 것이 LLM 서빙의 핵심입니다.

참고 자료Khan Academy CS · Jay Alammar Illustrated Transformer


7. 자연언어 기초

LLM 은 글자를 직접 못 읽어 숫자로 바꿔야 합니다. "문장 → 토큰 → 숫자 ID → 벡터(임베딩)" 이 변환 과정이 LLM 의 입구이며, EP2 의 핵심 전제입니다.

7.1 토큰화·BPE

문장을 의미 조각(토큰)으로 쪼개는 것이며, 자주 같이 나오는 글자쌍을 덩어리로 묶습니다(BPE).

비유 — 레고 분해. "안녕하세요" 를 ["안녕", "하세요"] 또는 ["안","녕","하","세","요"] 로 쪼갭니다. 자주 쓰는 덩어리일수록 한 조각이 됩니다.

직접 해보기 — 영어는 단어가 곧 토큰에 가깝지만, 한글은 글자/음절 단위로 더 잘게 쪼개집니다. "low", "lower", "lowest" 는 공통 "low" 를 한 토큰으로 묶습니다.

vocab = {"안녕": 0, "하세요": 1}   # 어휘 사전(해시!)
print([vocab[t] for t in ["안녕", "하세요"]])   # [0, 1]

실무. API 요금이 토큰 수로 매겨집니다(EP2). 한글은 영어보다 토큰이 많이 나와 같은 내용도 비용이 더 듭니다.

LLM 연결. 모든 입력의 첫 단계이며, 토큰 수가 곧 비용·컨텍스트 한도입니다(EP5 의 128K 컨텍스트 = 토큰 12.8만 개).

더 깊이Hugging Face LLM Course

7.2 임베딩 (Embedding)

토큰 ID 를 의미를 담은 벡터(1.1)로 바꾸는 것으로, 비슷한 뜻은 비슷한 방향을 가집니다.

비유 — 의미 지도. "왕 - 남자 + 여자 ≈ 여왕" 처럼, 단어를 공간의 점으로 놓으면 의미 관계가 방향·거리로 표현됩니다.

직접 해보기 — "강아지" 와 "개" 벡터는 코사인 유사도(1.4)가 높지만(가까움), "강아지" 와 "자동차" 는 낮습니다(멀음).

dog = np.array([0.9, 0.1, 0.8]); car = np.array([0.1, 0.9, 0.05])
from numpy.linalg import norm
print(round(dog @ car / (norm(dog)*norm(car)), 2))   # 0.4 (멀음)

실무. RAG·검색·추천이 전부 임베딩 유사도(1.4·벡터DB)로, "의미 검색" 의 기반입니다.

LLM 연결. 토큰 → 임베딩이 Transformer 의 입력층이며, 섹션 1(벡터)이 여기서 실제로 쓰입니다(EP2·EP3).

더 깊이Jay Alammar: Illustrated Word2vec

7.3 위치 임베딩 (Positional Embedding)

단어의 순서 정보를 벡터에 새기는 법입니다(어텐션 자체는 순서를 모르기 때문).

비유 — 좌석 번호. "철수가 영희를 좋아해" 와 "영희가 철수를 좋아해" 는 단어는 같고 순서만 다릅니다. 위치 정보 없이는 둘을 구분 못 하므로, 각 단어에 몇 번째인지 표식을 붙입니다.

직접 해보기 — 단어 집합 {철수, 영희, 좋아해} 만으로는 누가 누구를 좋아하는지 알 수 없습니다. "철수=1번, 영희=3번" 같은 위치 정보를 더해야 의미가 확정됩니다.

실무. EP5 의 RoPE·YaRN·LongRoPE 가 전부 위치 임베딩 기법으로, 긴 컨텍스트(128K)를 가능케 하는 핵심 기술입니다.

LLM 연결. EP5 전체 주제(RoPE 회전·YaRN 보정)가 위치 임베딩이며, 1.6(고유값·회전)의 직관이 여기 쓰입니다.

더 깊이Stanford CS224N · Jay Alammar Illustrated Transformer

7.4 한글 NFC 정규화

한글이 겉보기에 같아도 내부 코드가 다를 수 있어, 하나의 표준형(NFC)으로 통일하는 것입니다.

비유 — 같은 글자 다른 조립. "한" 을 완성형 1글자로 저장하느냐(NFC), ㅎ+ㅏ+ㄴ 조합으로 저장하느냐(NFD)에 따라 컴퓨터는 다른 문자열로 봅니다.

직접 해보기 — 완성형 "한글" 과 분해형(NFD) "한글" 은 겉보기엔 같아도 == 비교 시 False 입니다. NFC 정규화 후에야 True 가 됩니다.

import unicodedata
a = "한글"; b = unicodedata.normalize("NFD", a)
print(a == b, a == unicodedata.normalize("NFC", b))   # False True

실무. 맥(NFD)·윈도우(NFC) 파일명 차이, 한글 검색 버그의 단골 원인입니다. 본 youtubedu/youtubedown 도 NFC 정규화가 필수 룰입니다.

LLM 연결. 한글 토큰화·검색 정확도의 전제로, 정규화하지 않으면 같은 단어를 다른 토큰으로 처리합니다.

더 깊이Hugging Face LLM Course

7.5 정리

개념 LLM 에서의 역할
토큰화·BPE 입력 첫 단계 (비용·컨텍스트 단위)
임베딩 토큰 → 의미 벡터 (입력층)
위치 임베딩 순서 정보 (EP5 RoPE/YaRN)
NFC 정규화 한글 처리 정확도

한 문장으로, "문장 → 토큰 → ID → 임베딩(+위치)" 으로 글자를 벡터로 바꾸는 것이 LLM 의 입구이며, 섹션 1(벡터)·6(해시)이 여기서 합쳐집니다.

참고 자료Hugging Face LLM Course · Jay Alammar Illustrated Transformer · Stanford CS224N


8. 마치며

7개 영역이 LLM 안에서 어떻게 모이는지 한눈에 보면 다음과 같습니다.

글자 → [토큰화·임베딩(7장)] → 벡터(1장)
         ↓
    [어텐션 = 내적(1장)] ← 위치임베딩(7장)
         ↓ (행렬 곱 1장, Softmax 5장, 확률 3장)
    다음 단어 확률 분포
         ↓
    [손실(cross-entropy 3장) → 역전파(2장·5장) → 경사하강(2장)]
         ↓
       학습된 LLM

한 문장으로, LLM 은 글자를 벡터로 바꿔(1·7장) 행렬 곱과 내적으로 섞고(1·5장) 확률로 다음 단어를 찍고(3장) 미분으로 학습하는(2장) 거대한 계산기이며, 그걸 효율적으로 돌리는(6장) 것이 엔지니어링입니다.

이제 EP1~7 본 강의로 가세요. 막히는 용어가 나오면 어느 장인지 떠올리고, 이 자료의 해당 절과 참고 링크로 돌아오면 됩니다.

다음 단계 학습 경로 (검증일 2026-05-20, Tier 1 ≥6)

순서 자료 링크
수학 직관 3Blue1Brown Linear Algebra
ML 입문 Andrew Ng DeepLearning.AI
딥러닝 MIT 6.S191 introtodeeplearning.com
NLP·LLM Hugging Face LLM Course
Transformer Jay Alammar · CS224N Illustrated · CS224N
난이도
에피소드
질문
카드를 로딩 중...
답변

클릭하거나 Space를 눌러 뒤집기

0 / 0
학습 진도 0%
이동   Space 뒤집기   R 셔플